package com.haidechizi.sort;

import java.util.Arrays;

/**
 * @author: wangdejun
 * @create: 2020-03-14 10:22
 **/
public class InsertSort {

    public static void main(String[] args) {
        int[] arr = new int[]{8, 3, 5, 0, 1, 4, 6, 7};
        insertSort(arr);
        System.out.println(Arrays.toString(arr));

    }


    /**
     * 插入排序
     * 循环遍历数组的每个数
     * 每次将前i个数排好序
     *
     * @param arr
     */
    public static void insertSort(int[] arr) {

        // 只有一个数时，认为是排好序的，因此从第一个数开始排序
        for (int i = 1; i < arr.length; i++) {
            // 保存第i个数的副本
            int temp = arr[i];
            // 见i-1前面的数一个和temp进行比较，当temp前面的数大于temp时，将前面的数依次往后移动
            // 记录移动的位置
            int j;
            for (j = i - 1; j >= 0 && arr[j] > temp; j--) {
                // 将前面的数往后移动
                arr[j + 1] = arr[j];
            }

            // 将temp放回到元素组中（由于循环结束的时候，j--了，因此需要j+1）
            arr[j + 1] = temp;
        }

    }
}
